﻿// 244. 谜一样的牛.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <unordered_map>

using  namespace std;

/*
https://www.acwing.com/problem/content/245/

有 n 头奶牛，已知它们的身高为 1∼n 且各不相同，但不知道每头奶牛的具体身高。

现在这 n 头奶牛站成一列，已知第 i 头牛前面有 Ai 头牛比它低，求每头奶牛的身高。

输入格式
第 1 行：输入整数 n。

第 2..n 行：每行输入一个整数 Ai，第 i 行表示第 i 头牛前面有 Ai 头牛比它低。
（注意：因为第 1 头牛前面没有牛，所以并没有将它列出）

输出格式
输出包含 n 行，每行输出一个整数表示牛的身高。

第 i 行输出第 i 头牛的身高。

数据范围
1≤n≤105
输入样例：
5
1
2
1
0
输出样例：
2
4
5
3
1
*/



#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using  namespace std;

const int N = 100010;
int a[N], tr[N];
int n;
int ans[N];

int lowbit(int x) {
	return x & -x;
}

void add(int x, int c) {
	for (int i = x; i <= n; i += lowbit(i)) {
		tr[i] += c;
	}
}

int sum(int x) {
	int ret = 0;
	for (int i = x; i >= 1; i -= lowbit(i)) {
		ret += tr[i];
	}

	return ret;
}


int main() {
	scanf("%d", &n);
	add(1, 1);
	for (int i = 2; i <= n; i++) {
		scanf("%d", &a[i]);
		add(i, 1);
	}
	int ans[N];
	for (int i = n; i >= 1; i--) {
		int l = 1, r = n;
		while (l < r) {
			int mid = l + r >> 1;
			if (sum(mid) >= a[i] + 1) r = mid;
			else l = mid + 1;
		}

		ans[i] = l;
		add(l, -1);
	}

	for (int i = 1; i <= n; i++) {
		cout << ans[i] << endl;
	}

	return 0;
}